package cn.nawang.ebeim.ui.controller;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.google.gson.Gson;

import cn.nawang.ebeim.ui.bean.FileInfo;
import cn.nawang.ebeim.ui.util.DirectoryUtil;
import cn.nawang.ebeim.ui.util.StringComparator;

/**
 * @ClassName: DiskFilesController
 * @Description: TODO
 * @author fanyb
 * @date Nov 12, 2015 5:35:10 PM
 * @version v1.0
 */
@RestController
public class DiskFilesController {
  private static final Logger LOG = LoggerFactory.getLogger(DiskFilesController.class);
  
  /**
   * @author zhangjf
   * @Description: 获取系统目录
   * @param @param path
   * @param @return
   * @return String
   * @date 2015年10月29日上午8:42:30
   *
   * @修改人 zhangjf
   * @修改日期
   */
  @RequestMapping(value = "/system/files", method = RequestMethod.GET)
  public String getDiskFiles(String path) {
    LOG.info("getDiskFiles: {}", path);
    boolean isRoot = path == null || path.isEmpty();
    File[] files = DirectoryUtil.getFiles(path, isRoot);
    List<FileInfo> list = createFileInfos(files, isRoot);

    Gson gson = new Gson();
    String data = gson.toJson(list);
    LOG.debug("files:{}", data);
    return data;
  }

  /**
   * @author zhangjf
   * @Description: 获取系统文件夹
   * @param @param path
   * @param @return
   * @return String
   * @date 2015年10月29日上午8:42:55
   *
   * @修改人 阮志忠     修改了排序和显示
   * @修改日期
   */
  @RequestMapping(value = "/system/dirs", method = RequestMethod.GET)
  public String getDiskDirs(String path,String action) {
    LOG.info("getDiskFiles: {}", path);
    boolean isRoot = path == null || path.isEmpty();
    File[] files = DirectoryUtil.getDirs(path, isRoot);
    List<File> fileList = new ArrayList<File>();
    for(File f:files){
        if(action==null){
            fileList.add(f);
        }else if(f.canRead()&&f.canWrite()&& f.getFreeSpace()>0){
            fileList.add(f);
        }
    }
    
    Collections.sort(fileList, new StringComparator());
    List<FileInfo> list = createFileInfos(fileList, isRoot);
    Gson gson = new Gson();
    String data = gson.toJson(list);
    LOG.debug("files:{}", data);
    return data;
  }
  
  /**
   * @author zhangjf
   * @Description: 创建文件信息列表
   * @param @param files
   * @param @param isRoot
   * @param @return
   * @return List<FileInfo>
   * @date 2015年10月29日上午8:43:14
   *
   * @修改人 zhangjf
   * @修改日期
   */
  private List<FileInfo> createFileInfos(File[] files, boolean isRoot) {
    List<FileInfo> list = new ArrayList<FileInfo>();
    for (File f : files) {
      String name = isRoot ? f.getPath() : f.getName();
      list.add(new FileInfo(name, f.isDirectory()));
    }
    return list;
  }
  
  /** 
* @Title: createFileInfos 
* @Description: TODO() 
* @param  
* @return List<FileInfo>   
* @throws 
*/
private List<FileInfo> createFileInfos(List<File> files, boolean isRoot) {
      List<FileInfo> list = new ArrayList<FileInfo>();
      for (File f : files) {
        String name = isRoot ? f.getPath() : f.getName();
        list.add(new FileInfo(name, f.isDirectory()));
      }
      return list;
    }
}
